0ff9adb79042b050108f2ddde41e93d445312b7e,platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java,TooltipProvider,execute,#BrowseMode#,445
Before Change
if (offset >= selStart && offset < selEnd) return;
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
public void run() {
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
doExecute(file, offset);
}
});
}
});
}
private void doExecute(PsiFile file, int offset) {
After Change
if (offset >= selStart && offset < selEnd) return;
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
public void run() {
final ProgressIndicator progressIndicator = new ProgressIndicatorBase();
final ApplicationAdapter listener = new ApplicationAdapter() {
@Override
public void beforeWriteActionStart(Object action) {
progressIndicator.cancel();
}
};
final Application application = ApplicationManager.getApplication();
try {
application.addApplicationListener(listener);
ProgressManager.getInstance().runProcess(new Runnable(){
@Override
public void run() {
// This read action can possibe last for a long time, we want it to stop immediately on the first write access.
// For this purpose we launch it under empty progress and invoke progressIndicator#cancel on write access to avoid possible write lock delays.
application.runReadAction(new Runnable() {
public void run() {
doExecute(file, offset);
}
});
}
}, progressIndicator);
}
finally {
application.removeApplicationListener(listener);
}
}
});
}
private void doExecute(PsiFile file, int offset) {